14b032c36f039ce4282e6d41772b9f3b89b8356f,enterprise/src/main/java/org/neo4j/graphalgo/impl/path/ShortestPath.java,ShortestPath,internalPaths,#Node#Node#boolean#,162

Before Change


            return Arrays.asList( PathImpl.singular( start ) );
        }

        Map<Integer, Collection<Hit>> hits =
                new HashMap<Integer, Collection<Hit>>();
        Collection<Long> sharedVisitedRels = new HashSet<Long>();
        ValueHolder<Integer> sharedFrozenDepth = new ValueHolder<Integer>( null );
        ValueHolder<Boolean> sharedStop = new ValueHolder<Boolean>( false );
        ValueHolder<Integer> sharedCurrentDepth = new ValueHolder<Integer>( 0 );
        final DirectionData startData = new DirectionData( start,
                sharedVisitedRels, sharedFrozenDepth, sharedStop,
                sharedCurrentDepth, stopAsap, relExpander );
        final DirectionData endData = new DirectionData( end,
                sharedVisitedRels, sharedFrozenDepth, sharedStop,
                sharedCurrentDepth, stopAsap, relExpander.reversed() );
        
        while ( startData.hasNext() || endData.hasNext() )
        {
            goOneStep( startData, endData, hits, stopAsap, startData );
            goOneStep( endData, startData, hits, stopAsap, startData );
        }
        return least( hits, start, end );
    }
    
    private Collection<Path> least( Map<Integer, Collection<Hit>> hits, Node start, Node end )

After Change


            return Arrays.asList( PathImpl.singular( start ) );
        }

        Hits hits = new Hits();
        Collection<Long> sharedVisitedRels = new HashSet<Long>();
        ValueHolder<Integer> sharedFrozenDepth = new ValueHolder<Integer>( null );
        ValueHolder<Boolean> sharedStop = new ValueHolder<Boolean>( false );
        ValueHolder<Integer> sharedCurrentDepth = new ValueHolder<Integer>( 0 );
        final DirectionData startData = new DirectionData( start,
                sharedVisitedRels, sharedFrozenDepth, sharedStop,
                sharedCurrentDepth, stopAsap, relExpander );
        final DirectionData endData = new DirectionData( end,
                sharedVisitedRels, sharedFrozenDepth, sharedStop,
                sharedCurrentDepth, stopAsap, relExpander.reversed() );
        
        while ( startData.hasNext() || endData.hasNext() )
        {
            goOneStep( startData, endData, hits, stopAsap, startData );
            goOneStep( endData, startData, hits, stopAsap, startData );
        }
        
        Collection<Hit> least = hits.least();
        return least != null ? hitsToPaths( least, start, end ) : Collections.<Path>emptyList();
    }

    // Few long-lived instances